import os
import yaml


# 第一步获取项目路径
# 封装完记得调试
def get_object_path():
    current_dir = os.path.dirname(__file__)
    root_dir = os.path.dirname(current_dir)
    return root_dir


# 第二步用于读取用例的yaml数据-参数化的时候使用
def read_test_data(yaml_path,node_name):
    """
    :param yaml_path: 要读取的测试数据的文件路径
    :param node_name: 要读取的节点的数据
    :return:
    """
    with open(yaml_path, 'r', encoding="utf-8") as f:
        data = yaml.safe_load(f)
        a = data[node_name]
        return list(a.values())



# -----------------------------------------------全局变量方法封装---------------------------------------------------------
# 写全局变量：将token等全局变量写入yaml文件中
def write_glo(data):
    with open(get_object_path() + r'\glo_var.yaml', encoding='utf-8', mode='a') as f:
        # 通过utf-8的编码格式向D:\PytestApi\extract.yaml 文件中写入内容 打开的yaml文件传给文件流f，mode='a'指的是追加的形式，而不是覆盖原来的内容
        yaml.dump(data, stream=f, allow_unicode=True)
        # yaml.dump()的作用是写入yaml数据，allow_unicode=True允许使用unicode编码


def read_glo(node_name):
    with open(get_object_path() + r'\glo_var.yaml', encoding='utf-8') as f:
        # 通过utf-8的编码格式读取D:\PytestApi\extract.yaml 文件中的内容 作为文件流f
        value = yaml.load(stream=f, Loader=yaml.FullLoader)
        # yaml.load()的作用是加载yaml数据，FullLoader参数表示的是加载全部yaml数据
        return value[node_name]


# 清除全局变量，每次框架中的接口自动化用例运行前，先清除上次环境中的全局变量
def clear_glo():
    with open(get_object_path() + r'\glo_var.yaml', encoding='utf-8', mode='w') as f:
        # 通过utf-8的编码格式读取D:\PytestApi\extract.yaml 文件中的内容 作为文件流f   mode='w' 表示以“写入”的模式打开
        f.truncate()


# -----------------------------------------------局部变量方法封装---------------------------------------------------------

# 该方法在框架中的作用：将局部变量写入yaml文件中
def write_env(data):
    with open(get_object_path() + r'\env_var.yaml', encoding='utf-8', mode='a') as f:
        # 通过utf-8的编码格式向D:\PytestApi\extract.yaml 文件中写入内容 打开的yaml文件传给文件流f，mode='a'指的是追加的形式，而不是覆盖原来的内容
        yaml.dump(data, stream=f, allow_unicode=True)
        # yaml.dump()的作用是写入yaml数据，allow_unicode=True允许使用unicode编码


# 读取env_var.yaml文件 获取局部变量
def read_env(node_name):
    with open(get_object_path() + r'\env_var.yaml', encoding='utf-8') as f:
        # 通过utf-8的编码格式读取D:\PytestApi\extract.yaml 文件中的内容 作为文件流f
        value = yaml.load(stream=f, Loader=yaml.FullLoader)
        # yaml.load_all()的作用是加载yaml数据，FullLoader参数表示的是加载全部yaml数据
        return value[node_name]


# 清空env_var.yaml文件数据
def clear_env():
    with open(get_object_path() + r'\env_var.yaml', encoding='utf-8', mode='w') as f:
        # 通过utf-8的编码格式读取D:\PytestApi\extract.yaml 文件中的内容 作为文件流f   mode='w' 表示以“写入”的模式打开
        f.truncate()
        # 调truncate()方法将打开的文件流f清空

# if __name__ == '__main__':
# 调试read_test_data()
# print(read_test_data(r'D:\project\api_pytest25_me\data\data_coupon.yaml', 'coupon_list_search'))
